package ndk;

/*
 *1.JNI修改数组并进行同步
 * */
public class JNIArray {

	private static String name = "";	// 会被native大量调用

	private static String name2 = "";	// 会被native大量调用	

	public static void main(String[] args){
	
		// 1.数组
		int arr[] = {10,12,15,9,10,5};
		sort(arr);
		for(int i = 0; i < arr.length; i++){
			System.out.println("arr-->" + arr[i]);
		}

		// 2.局部变量
		localRef();

		// 3.全局变量
		saveGlobalRef("123");
		String str = getGlobalRef();
		System.out.println("native callback str-->" + str);
		// 回收native层的全局变量
		deleteGlobalRef();
		// String str2 = getGlobalRef();
		// System.out.println("str2-->" + str2);

		// native初始化静态缓存
		initStaticCache();

		// 4.static静态缓存，native层大量方法区获取name属性
		staticLocalCache("Tom");
		System.out.println("name --> " + name);
		staticLocalCache("Jack");
		System.out.println("name --> " + name);
		staticLocalCache("Alim");
		System.out.println("name --> " + name);

		System.out.println("name2 --> " + name2);

		try {
			// 捕捉从native层跑抛出的异常
			handleException();
		} catch(Exception e) {
			e.printStackTrace();
		}

	}

	/*
	 * 定义jni函数- JNI层操作数组并进行数据同步
	 * */
	private static final native void sort(int[] arr);
	// 局部引用和全局引用
	private static final native void localRef();
	private static final native void deleteGlobalRef();
	private static final native void saveGlobalRef(String str);
	private static final native String getGlobalRef();
	// static静态缓存
	private static final native void staticLocalCache(String nickname);
	// 初始化静态缓存
	private static final native void initStaticCache();

	// native异常处理
	private static final native void handleException();

	static{
		// 引入编译好的动态库
		// System.loadLibrary		加载apk中libs中的so库，或者是系统环境变量中的so库
		// System.load				加载指定路径中的so库
		System.load("/home/wukj/works/NDK-Grammar/src/com/ndk/grammar/libarray.so");
	}

}


